% $Id: maps.tex,v 5.2 90/06/23 22:21:51 jsp Rel $
%
% Copyright (c) 1989 Jan-Simon Pendry
% Copyright (c) 1989 Imperial College of Science, Technology & Medicine
% Copyright (c) 1989 The Regents of the University of California.
% All rights reserved.
%
% This code is derived from software contributed to Berkeley by
% Jan-Simon Pendry at Imperial College, London.
%
% Redistribution and use in source and binary forms are permitted provided
% that: (1) source distributions retain this entire copyright notice and
% comment, and (2) distributions including binaries display the following
% acknowledgement:  ``This product includes software developed by the
% University of California, Berkeley and its contributors'' in the
% documentation or other materials provided with the distribution and in
% all advertising materials mentioning features or use of this software.
% Neither the name of the University nor the names of its contributors may
% be used to endorse or promote products derived from this software without
% specific prior written permission.
% THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
% WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
% MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
%
%	%W% (Berkeley) %G%


\Chapter{Mount-maps}

\Amd\ has no built-in knowledge of machines or filesystems.
External {\em mount-maps} are used to provide the required information.
Specifically, \amd\ needs to know when and under what conditions it should
mount filesystems.

The map entry corresponding to the requested name contains
a list of possible locations from which to resolve the request.
Each location specifies  filesystem type, information required by that
filesystem (for example the block special device in the case of \UFS), and
some information describing where to mount the filesystem (\see \Ref{mount location}).
A location may also contain {\em selectors} (\see \Ref{selectors}).

\Section{Map Types}

A mount-map can be implemented as a regular file, an ndbm database
a YP map \cite{sun:yp} or via
the {\em Hesiod} \cite{mit:hesiod} name
server.
In addition, the password ``file'' can be used as a source of
map information.
%\footnote{In future, gdbm databases will also be supported.}
A mount-map name is a sequence of characters.
When an automount point is created a handle on the mount-map
is obtained.  If the the map name begins with the sequence
``{\tt hesiod.}''\ then the {\em Hesiod} name server will be used.
If the map name is the string ``{\tt /etc/passwd}'' then the password
``file'' will be used.
Otherwise the map name is referenced as a file,
then as an ndbm database by that name and then as a YP map.
As soon as a valid reference is found the map type is noted
for future use but any resources held are released, for example
any open file descriptors are closed.
The available map types are a configurable component of \amd\ and
can be displayed by running the command {\tt amd~-v}.

By default, \amd\ does not cache any data retrieved from a mount map.
This is a policy decision based on the observation that most workstations
have more available CPU time than spare memory.
However, on a multi-user service or larger workstation the faster
response provided by a cache can be preferable.  The \opt{cache}
option can be specified on automount points to alter the
caching behaviour (\see \Ref{auto-fs}).
Specifying {\tt cache:=mapdefault} selects a suitable default
cache mode depending on the map type.  The individual defaults
are described below.

\Subsection{File maps}
When \amd\ searches a file for a map entry it does a simple scan of the file
and supports both comments and continuation lines.

Continuation lines are indicated by a backslash character (``{\verb+\+}'') as
the last character of a line in the file.  The backslash, newline character
{\em and any leading white space on the following line} are discarded.  A maximum
line length of 2047 characters is enforced after continuation lines are read
but before comments are stripped.  Each line must end with
a newline character; that is newlines are terminators, not separators.
The following examples illustrate this:
\begin{verbatim}
key     valA   valB;   \
          valC
\end{verbatim}
specifies {\em three} locations, and is identical to
\begin{verbatim}
key     valA   valB;   valC
\end{verbatim}
However,
\begin{verbatim}
key     valA   valB;\
          valC
\end{verbatim}
specifies only {\em two} locations, and is identical to
\begin{verbatim}
key     valA   valB;valC
\end{verbatim}

After a complete line has been read from the file, including continuations,
\amd\ determines whether there is a comment on the line.
A comment begins with a hash (``{\tt \#}'') character and continues to the
end of the line.
There is no way to escape or change the comment lead-in character.

Note that continuation lines and comment support {\em only} apply to
file maps and ndbm maps built with the {\tt mk-amd-map} program.

When caching is enabled, file maps have a default cache mode of {\tt all} (\see \Ref{afs:cache}).

\Subsection{ndbm maps}\label{ndbm-maps}
An ndbm map may be used as a fast access form of a file map.
A program, {\tt mk-amd-map}, converts a normal map file into
an ndbm database.  This program supports the same continuation and
comment conventions that are provided for file maps.
Note that ndbm format files {\em may not} be
sharable across machine architectures.
The notion of speed generally only applies to large maps;
a small map, less than a single disk block, is almost certainly
better implemented as a file map.

ndbm maps do not support cache mode {\tt all} and, when
caching is enabled, have a default cache mode of {\tt inc} (\see \Ref{afs:cache}).

\Subsection{NIS maps}
When using NIS (formerly YP), an \amd\ map is implemented directly by the
underlying NIS map.
Comments and continuation lines are {\em not} supported
in the automounter and must be stripped when constructing the NIS server's database.

NIS maps do not support cache mode {\tt all} and,
when caching is enabled,
have a default cache mode of {\tt inc} (\see \Ref{afs:cache}).

\Subsection{Hesiod}
When the map name begins with the string ``{\tt hesiod.}'' lookups
are made using the {\em Hesiod} name server.  The string following
the dot is used as a name qualifier and is prepended with
the key being located.  The entire string is then resolved in the
{\t automount} context.  For example, if the map name is {\tt hesiod.homes}
and the key is {\tt jsp} then {\em Hesiod} is asked to resolve
{\tt jsp.homes.automount}.

Hesiod maps do not support cache mode {\tt all} and, when
caching is enabled, have a default cache mode of {\tt inc} (\see \Ref{afs:cache}).

\Subsection{Password}\label{map:passwd}
The password map support is unlike the four previous map types.
When the map name is the string {\tt /etc/passwd} 
\amd\ can lookup a user name in the password file and re-arrange
the home directory field to produce a usable map entry.

\Amd\ assumes the home directory has the format
{\tt /}{\em anydir}{\tt /}{\em dom$_1$}{\tt /../}{\em dom$_n$}{\tt /}{\em login}.
It breaks this string into a map entry where
\Var{rfs} has the value ``{\tt /}{\em anydir}{\tt /}{\em dom$_n$}'',
\Var{rhost} has the value ``{\em dom$_n$}{\tt .}{\em ...}{\tt .}{\em dom$_1$}'',
and \Var{sublink} has the value ``{\em login}''.

Thus if the password file entry was
\begin{quote}
\tt /home/achilles/jsp
\end{quote}
the map
entry used by \amd\ would be
\begin{quote}
\tt rfs:=/home/achilles;rhost:=achilles;sublink:=jsp
\end{quote}
Similarly, if the password file entry was
\begin{quote}
\tt /home/cc/sugar/mjh
\end{quote}
the map entry used by \amd\ would be 
\begin{quote}
\tt rfs:=/home/sugar;rhost:=sugar.cc;sublink:=jsp
\end{quote}

%\Subsection{Gdbm}

\Section{Key Lookup}

The key is located in the map whose type was determined when the
automount point was first created.
In general the key is a pathname component.
In some circumstances this may be modified by variable expansion
(\see \Ref{var-expansion})
and prefixing.
If the automount point has a prefix, specified by the \opt{pref} option, then
that is prepended to the search key before the map is searched.

If the key cannot be found then a {\em wildcard} match is attempted.
Currently this simply attempts to locate a special key ``{\tt *}''.
If the wildcard is not found then an error code is propagated back to the
kernel, otherwise \amd\ proceeds as if an exact match had been found.
The value field is then used to resolve the mount request (\see \Ref{filesystems}).


\Section{Location Format}\label{opts:values}

The value field from the lookup provides the information required to mount a filesystem.
The information is parsed according to the syntax shown in figure \ref{figure:so-grammar}.
\begin{figure}[htb]
\begin{tabbing}
Indent \= Long Gram Rule \= \kill
       \> {\em location-list}:\\
       \>              \> {\em location-selection}\\
       \>              \> {\em location-list}\ \verb*+ +\ {\tt ||}\ \verb*+ +\ {\em location-selection}\\
       \> {\em location-selection}:\\
       \>              \> {\em location}\\
       \>              \> {\em location-selection}\ \verb*+ +\ {\em location}\\
       \> {\em location}:\\
       \>              \> {\em location-info}\\
       \>              \> {\tt -}{\em location-info}\\
       \>              \> {\tt -}\\
       \> {\em location-info}:\\
       \>              \> {\em sel-or-opt}\\
       \>              \> {\em location-info}{\tt ;}{\em sel-or-opt}\\
       \>              \> {\tt ;}\\
       \> {\em sel-or-opt}:\\
       \>              \> {\em selection}\\
       \>              \> {\em opt-ass}\\
       \> {\em selection}:\\
       \>              \> {\rm selector}{\tt ==}{\em value}\\
       \>              \> {\rm selector}{\tt !=}{\em value}\\
       \> {\em opt-ass}:\\
       \>              \> {\rm option}{\tt :=}{\em value}\\
\end{tabbing}
\caption{\label{figure:so-grammar}Location syntax}
\end{figure}
Note that unquoted whitespace is not allowed in a location description.
White space is only allowed, and is mandatory, where shown with the symbol \verb*+ +.

A {\em location-selection} is a list of possible volumes with which to
satisfy the request.  {\em location-selection}s are separated by the {\tt ||}
operator.  The effect of this operator is to prevent use of location-selections
to its right if any of the location-selections on its left were selected
(see \Ref{selectors}).

The location-selection, and singleton {\em location-list},
{\tt type:=ufs;dev:=/dev/xd1g} would inform \amd\ to mount a
\UFS\ filesystem from the block special device {\tt /dev/xd1g}.

The {\em sel-or-opt} component is either the name of an option required by a
specific filesystem, or it is the name of a built-in, predefined selector such
as the architecture type.
The value may be quoted with double quotes ``{\tt "}'',
for example {\tt type:="ufs";dev:="/dev/xd1g"}.  These quotes are
stripped when the value is parsed and there is no way to get a double quote
into a value field.  Double quotes are used to get white space into a value field,
which is needed for the program filesystem (\see \Ref{pfs}).

\label{defaults}A location beginning with a dash ``{\tt -}'' is used
to specify default values for subsequent locations.
Any previously specified defaults in the location-list are discarded.  The
default string can be empty in which case no defaults apply.
The location {\tt -fs:=/mnt;opts:=ro} would set the local mount point
to {\tt /mnt} and cause mounts to be read-only by default.
Defaults specified this way are appended to, and so
override, any global map defaults given
with {\tt /defaults}\label{/defaults}).
A {\tt /defaults} value {\em gdef} and a location list
\begin{quote}
${\tt -}{\em def}_a\ $\verb*+ +$\ {\em loc}_{a_1}\ $\verb*+ +$\ {\em loc}_{a_2}\ $\verb*+ +$\ {\tt -}{\em def}_b\ $\verb*+ +$\ {\em loc}_{b_1}\ \ldots$
\end{quote}
is equivalent to
\begin{quote}
${\tt -}{\em gdef}{\tt ;}{\em def}_a\ $\verb*+ +$\ {\em loc}_{a_1}\ $\verb*+ +$\ {\em loc}_{a_2}\ $\verb*+ +$\ {\tt -}{\em gdef}{\tt ;}{\em def}_b\ $\verb*+ +$\ {\em loc}_{b_1}\ \ldots$
\end{quote}

\Subsection{Variable expansion}\label{var-expansion}

To allow generic location specifications \amd\ does variable expansion
on each location and also on some of the option strings.
Any option or selector appearing in the form \Var{{\em var}}
is replaced by the current value of that option or selector.
For example, if the value of \Var{key} was {\tt bin}, \Var{autodir} was {\tt /a}
and \Var{fs} was \Var{autodir}{\tt /local/}\Var{key} then after
expansion \Var{fs} would have the value {\tt /a/local/bin}.
Any environment variable can be accessed in a similar way.

Two pathname operators are available when expanding a variable.
If the variable name begins with ``{\tt /}'' then only the
last component of then pathname is substituted.  For example,
if \Var{path} was {\tt /foo/bar} then \Var{/path} would be
expanded to {\tt bar}.
Similarly, if the variable name ends with ``{\tt /}'' then all but
the last component of the pathname is substituted.
In the previous example, \Var{path/} would be expanded to {\tt /foo}.

Variable expansion is a two phase process.  Before a location is parsed, all
references to selectors, \eg\ \Var{path}, are expanded.  The location is then
parsed, selections are evaluated and option assignments recorded.  If there
were no selections or they all succeeded the location is used and the values of
the following options are expanded in the order given:
\opt{sublink}, \opt{rfs}, \opt{fs}, \opt{opts}, \opt{mount} and \opt{unmount}.
Note that expansion of option values is done after {\em all} assignments have
been completed and not in a purely left to right order as is done by the shell.
This generally has the desired effect but care must be taken if one of the
options references another, in which case the ordering can become significant.

There are two special cases concerning variable expansion.  Firstly, before a map
is consulted, any selectors in the name received from the kernel are expanded.
For example, if the request from the kernel was for \Var{arch}{\tt .bin} and the
machine architecture was {\tt vax}, the value given to \Var{key} would be {\tt vax.bin}.
Secondly, the value of \Var{rhost} is expanded and normalized before the other options
are expanded.  The normalization process strips any local sub-domain components.
For example, if \Var{domain} was {\tt Berkeley.EDU} and \Var{rhost} was initially
{\tt snow.Berkeley.EDU}, after the normalization it would simply be {\tt snow}.

\Subsection{Selectors}\label{selectors}

Selectors are used to control the use of a location.
It is possible to share a mount map between many machines in
such a way that filesystem location, architecture and operating
system differences are hidden from the users.
A selector of the form {\tt arch==sun3;os==sos4} would only apply
on Sun-3s running SunOS 4.$x$.

Selectors are evaluated left to right.  If a selector fails then that
location is ignored.  Thus the selectors form a conjunction and the
locations form a disjunction.
If all the locations are ignored or otherwise fail then \amd\ uses
the {\em error} filesystem (\see \Ref{error-fs}).  This is equivalent
to having a location {\tt type:=error} at the end of each mount-map
entry.

The selectors currently implemented are:

\begin{list}{}%
{\settowidth{\labelwidth}{{\tt autodir}}\setlength{\leftmargin}{1.2\labelwidth}}
\item[\tt arch\hfill]
the machine architecture which was automatically determined at compile time.
The architecture type can be displayed by running the command {\tt amd~-v}.
The currently supported architectures are listed in table \ref{table:arch}.
\begin{table}[htb]
\centering
\begin{tabular}{ll}
Name		& Architecture \\ \hline
\tt alliant	& Alliant FX/4 \\
\tt arm		& Acorn ARM \\
\tt encore      & Encore (reserved) \\
\tt fps500	& FPS Model 500 \\
\tt hp9000	& HP 9000/300 family \\
\tt hp9k8       & HP 9000/800 family (reserved) \\
\tt ibm032	& IBM RT \\
\tt ibm6000	& IBM RISC System/6000 \\
\tt macII	& Apple Mac II \\
\tt mips	& MIPS R2000 \\
\tt multimax	& Encore Multimax \\
\tt orion105	& HLH Orion 1/05 \\
\tt powernode	& Gould Powernode family \\
\tt sun3	& Sun-3 family \\
\tt sun4	& Sun-4 family \\
\tt tahoe	& Tahoe family \\
\tt vax		& DEC \sc Vax \\
\end{tabular}
\caption{\label{table:arch}Architectures supported by \amd}
\end{table}

\item[\tt autodir\hfill]
the default directory under which to mount filesystems.
This may be changed by the ``-a'' command line option.
See the \opt{fs} option.

\item[\tt byte\hfill]\label{byte-selector}
the machine's byte ordering.  This is either {\tt little}, indicating
little-endian, or {\tt big}, indicating big-endian.
One possible use is to share {\tt rwho} databases (see \Ref{example:rwho}).
Another is to share ndbm databases,
however this use can be considered a courageous juggling act.

\item[\tt cluster\hfill]
is provided as a hook for the name of the local cluster.  This can
be used to decide which servers to use for copies of replicated filesystems.
\Var{cluster} defaults to the value of \Var{domain} unless a different
value is set with the ``-C'' command line option.

\item[\tt domain\hfill]
the local domain name as specified by the ``-d'' command line option.
See {\tt host}.

\item[\tt host\hfill]
the local hostname as determined by {\bf gethostname}(2).
If no domain name was specified on the command line
and the hostname contains a period ``{\tt .}'' then the string
before the period is used as the host name, and the string
after the period is assigned to \Var{domain}.
For example, if the hostname is {\tt styx.doc.ic.ac.uk} the {\tt host}
would be {\tt styx} and {\tt domain} would be {\tt doc.ic.ac.uk}.
{\tt hostd} would be {\tt styx.doc.ic.ac.uk}.

\item[\tt hostd\hfill]
is \Var{host} and \Var{domain} concatenated with a ``{\tt .}'' inserted between them
if required.
If \Var{domain} is an empty string then \Var{host} and \Var{hostd} will
be identical.

\item[\tt karch\hfill]
is provided as a hook for the kernel architecture.  This is used
on SunOS 4, for example, to distinguish between different {\tt /usr/kvm} volumes.
\Var{karch} defaults to the value of \Var{arch} unless a different
value is set with the ``-k'' command line option.

\item[\tt os\hfill]
the operating system.
Like the machine architecture, this is automatically determined at compile time.
The operating system name can be displayed by running the command {\tt amd~-v}.
The currently supported operating systems are listed in table \ref{table:os}.
\begin{table}[htb]
\centering
\begin{tabular}{ll}
Name		& System \\ \hline
\tt acis43	& 4.3 BSD for IBM RT \\
\tt aix3	& AIX 3.1 \\
\tt aux		& System V for Mac-II \\
\tt bsd44	& 4.4 BSD \\
\tt concentrix	& Concentrix 5.0 \\
\tt fpx4	& Celerity FPX 4.1/2 \\
\tt hlh42	& HLH OTS 1.$x$ (4.2 BSD) \\
\tt hpux	& HP-UX 6.$x$ \\
\tt riscix	& Acorn RISC iX \\
\tt sos3	& SunOS 3.4 \& 3.5 \\
\tt sos4	& SunOS 4.$x$ \\
\tt umax43	& Umax 4.3 BSD \\
\tt u2\_2	& Ultrix 2.2 \\
\tt u3\_0	& Ultrix 3.0 \\
\tt utx32	& Gould UTX/32 Rel 2.$x$ \\
\tt xinu43	& mt Xinu MORE/bsd \\
\end{tabular}
\caption{\label{table:os}Operating systems supported by \amd}
\end{table}
\end{list}

The following selectors are also provided.  Unlike the other selectors,
they vary for each lookup.
Note that when the name from the kernel is expanded prior to a map
lookup, these selectors are all defined as empty strings.
\begin{list}{}%
{\settowidth{\labelwidth}{{\tt autodir}}\setlength{\leftmargin}{1.2\labelwidth}}
\item[\tt key\hfill]
the name being resolved.
For example, if {\tt /home} is an automount point, then accessing
{\tt /home/foo}\label{foo-path} would set \Var{key} to the string {\tt foo}.
The key is prefixed by the \opt{pref} option set in the parent mount point.
The default prefix is an empty string.  If the prefix was {\tt blah/} then
\Var{key} would be set to {\tt blah/foo}.

\item[\tt map\hfill]
the name of the mount map being used.

\item[\tt path\hfill]
the full pathname of the name being resolved.  For example {\tt /home/foo}
in the example above.

\end{list}

Selectors can be negated by using {\tt !=} instead of {\tt ==}.
For example to select a location
on all non-{\sc Vax} machines the selector {\tt arch!=vax} would be used. 

\Subsection{Options}\label{options}

Options are parsed concurrently with selectors.  The difference is that
when an option is seen the string following the ``{\tt :=}'' is recorded for
later use.  As a minimum the \opt{type} option must be specified.
Each filesystem type has other options which must also be specified.
The filesystem specific options are detailed in \Ref{filesystems}.

The following options apply to more than one filesystem type:
\begin{list}{}
{\settowidth{\labelwidth}{{\tt sublink}}\setlength{\leftmargin}{1.2\labelwidth}}
\item[\tt delay\hfill]
the delay, in seconds, before an attempt will be made to mount from the current location.
Auxilliary data, such as network address, file handles and so on are computed
regardless of this value.
A delay can be used to implement the notion of primary and secondary file servers.
The secondary servers would have a delay of a few seconds,
thus giving the primary servers a chance to respond first.

\item[\tt fs\hfill]\label{mount location}
the local mount point.
The semantics of this option vary between filesystems.

For \NFS\ and \UFS\ filesystems the value of \Var{fs} is used as the local
mount point.  It is important that this string uniquely identifies the
filesystem being mounted.  To satisfy this requirement, it should contain the
name of the host on which the filesystem is resident and the pathname
of the filesystem on the local or remote host.

The reason for
requiring the hostname is clear if replicated filesystems are considered.
If a fileserver goes down and a replacement filesystem is mounted then the {\em local}
mount point {\em must} be different from that of the filesystem which
is hung.
Some encoding of the filesystem name is required if more than one filesystem
is to be mounted from any given host.

If the hostname is first in the path then all mounts from a particular
host will be gathered below a single directory.  If that server goes
down then the hung mount points are less likely to be accidentally referenced,
for example when {\bf getwd}(3) traverses the namespace to find the pathname
of the current directory.

The {\tt fs} defaults to \Var{autodir}/\Var{rhost}\Var{rfs}.
In addition, {\tt rhost} defaults to the local host name (\Var{host}) and
{\tt rfs} defaults to the value of \Var{path}, which
is the full path of the requested file; {\tt /home/foo}
in the example above (\see \Ref{foo-path}).
\Var{autodir} defaults to {\tt /a} but may be changed with the ``-a''
command line option\footnote{Sun's automounter defaults to {\tt /tmp\_mnt}}.
Note that there is no ``{\tt /}'' between the \Var{rhost} and \Var{rfs} since
\Var{rfs} begins with a ``{\tt /}''.

\item[\tt opts\hfill]
the options to pass to the mount system call.
A leading ``{\tt -}'' is silently ignored.
The mount options supported generally correspond to
those used by {\bf mount}(8) and are listed in table \ref{table:mount opts}.
Some additional pseudo-options are interpreted by \amd\ and
are listed in table \ref{table:pseudo-mount opts}.
Unless specifically overridden, each of the system default mount
options applies.
Any options not recognised are ignored.
If no options list is supplied the string {\tt rw,defaults} is used
and all the system default mount options apply.
\begin{table}[htb]
\centering
\begin{tabular}{lp{4in}}
Option		& Semantics \\\hline
\tt grpid	& Use BSD directory group-id semantics. \\
\tt intr	& Allow keyboard interrupts on hard mounts. \\
\tt nodevs	& Don't allow local special devices on this filesystem. \\
\tt nosuid	& Don't allow set-uid or set-gid executables on this filesystem. \\
\tt quota	& Enable quota checking on this mount. \\
\tt retrans=$n$	& The number of \NFS\ retransmits made before a user error is generated
		  by a {\tt soft} mounted filesystem, and before a
		  {\tt hard} mounted filesystem reports {\tt NFS server {\em yoyo}
		  not responding still trying}. \\
\tt ro		& Mount this filesystem readonly. \\
\tt soft	& Give up after {\em retrans} retransmissions. \\
\tt tcp		& Use TCP/IP instead of UDP/IP \\
\tt timeo=$n$	& The \NFS\ timeout, in tenth-seconds, before a request is retransmitted. \\
\end{tabular}
\caption{Mount options passed to the mount system call\label{table:mount opts}}
\end{table}

\begin{table}[htb]
\centering
\begin{tabular}{lp{4in}}
Option		& Semantics \\\hline
\tt notimeout	& Configures the mount so that its time-to-live will
		  never expire.  This is also the default for some
		  filesystem types. \\
%
% Implementation broken:
\tt ping=$n$	& The interval, in seconds, between keep-alive pings.  When four
		  consecutive pings have failed the mount point is
		  marked as hung.  This interval defaults to 30 seconds.
		  If the ping interval is negative, no pings are sent and
		  the host is assumed to be always up.  Pings are never sent
		  for a TCP mount.  \\

\tt retry=$n$	& The number of times to retry the mount system call. \\
\tt utimeout=$n$& The interval, in seconds, by which the mount's
		  time-to-live\label{opt:utimeout}
		  is extended after an unmount attempt has failed.
		  In fact the interval is extended before the unmount
		  is attempted to avoid thrashing.  The default value
                  is 120 seconds (two minutes) or as set by the ``-w''
                  command line option. \\
\end{tabular}
\caption{Mount options interpreted by \amd\label{table:pseudo-mount opts}}
\end{table}

\item[\tt sublink\hfill]
the subdirectory within the mounted filesystem to which the reference
should point.
This can be used to prevent duplicate mounts in cases where multiple
directories in the same mounted filesystem are used.

\item[\tt type\hfill]
the filesystem type to be used.  A full description of each
type is given in \Ref{filesystems}.

\end{list}

Superfluous option specifications are ignored and are not reported
as errors.
